{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from datetime import datetime\n",
    "from influxdb import InfluxDBClient\n",
    "import talib as  ta\n",
    "import seaborn as sns\n",
    "import warnings\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>open</th>\n",
       "      <th>preclose</th>\n",
       "      <th>symbol</th>\n",
       "      <th>value</th>\n",
       "      <th>vol</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-01-04 00:00:00+00:00</th>\n",
       "      <td>2010-01-04T00:00:00Z</td>\n",
       "      <td>21823.28</td>\n",
       "      <td>22024.83</td>\n",
       "      <td>21689.22</td>\n",
       "      <td>21860.04</td>\n",
       "      <td>21872.50</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48509170000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-05 00:00:00+00:00</th>\n",
       "      <td>2010-01-05T00:00:00Z</td>\n",
       "      <td>22279.58</td>\n",
       "      <td>22297.04</td>\n",
       "      <td>21987.27</td>\n",
       "      <td>22092.15</td>\n",
       "      <td>21823.28</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>82973500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-06 00:00:00+00:00</th>\n",
       "      <td>2010-01-06T00:00:00Z</td>\n",
       "      <td>22416.67</td>\n",
       "      <td>22514.79</td>\n",
       "      <td>22277.13</td>\n",
       "      <td>22357.46</td>\n",
       "      <td>22279.58</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>91328340000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-07 00:00:00+00:00</th>\n",
       "      <td>2010-01-07T00:00:00Z</td>\n",
       "      <td>22269.45</td>\n",
       "      <td>22548.03</td>\n",
       "      <td>22169.61</td>\n",
       "      <td>22548.03</td>\n",
       "      <td>22416.67</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>79167640000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-08 00:00:00+00:00</th>\n",
       "      <td>2010-01-08T00:00:00Z</td>\n",
       "      <td>22296.75</td>\n",
       "      <td>22443.22</td>\n",
       "      <td>22206.16</td>\n",
       "      <td>22282.75</td>\n",
       "      <td>22269.45</td>\n",
       "      <td>HSI</td>\n",
       "      <td>0.0</td>\n",
       "      <td>71931720000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           Date     close      high       low  \\\n",
       "Date                                                                            \n",
       "2010-01-04 00:00:00+00:00  2010-01-04T00:00:00Z  21823.28  22024.83  21689.22   \n",
       "2010-01-05 00:00:00+00:00  2010-01-05T00:00:00Z  22279.58  22297.04  21987.27   \n",
       "2010-01-06 00:00:00+00:00  2010-01-06T00:00:00Z  22416.67  22514.79  22277.13   \n",
       "2010-01-07 00:00:00+00:00  2010-01-07T00:00:00Z  22269.45  22548.03  22169.61   \n",
       "2010-01-08 00:00:00+00:00  2010-01-08T00:00:00Z  22296.75  22443.22  22206.16   \n",
       "\n",
       "                               open  preclose symbol  value          vol  \n",
       "Date                                                                      \n",
       "2010-01-04 00:00:00+00:00  21860.04  21872.50    HSI    0.0  48509170000  \n",
       "2010-01-05 00:00:00+00:00  22092.15  21823.28    HSI    0.0  82973500000  \n",
       "2010-01-06 00:00:00+00:00  22357.46  22279.58    HSI    0.0  91328340000  \n",
       "2010-01-07 00:00:00+00:00  22548.03  22416.67    HSI    0.0  79167640000  \n",
       "2010-01-08 00:00:00+00:00  22282.75  22269.45    HSI    0.0  71931720000  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "client = InfluxDBClient('192.168.3.108',8086)\n",
    "\n",
    "dbname = \"KlineIndex\"\n",
    "sqlday = \"select * from KlineDay where symbol='HSI' and  time > '2010-01-01 00:00:00'\"\n",
    "\n",
    "rsday = client.query(sqlday, database=dbname)\n",
    "query = rsday.get_points()\n",
    "df_hsi = pd.DataFrame(query)\n",
    "df_hsi = df_hsi.rename(columns={'time':'Date'})\n",
    "df_hsi.index = pd.to_datetime(df_hsi['Date'], format=\"%Y-%m-%d\")\n",
    "df_hsi.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "2021-09-08 00:00:00+00:00    292.64\n",
       "2021-09-09 00:00:00+00:00   -374.43\n",
       "2021-09-10 00:00:00+00:00    303.92\n",
       "2021-09-13 00:00:00+00:00   -349.82\n",
       "2021-09-14 00:00:00+00:00   -851.40\n",
       "Name: close, dtype: float64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Close = df_hsi.close\n",
    "\n",
    "lag5Close = Close.shift(5)\n",
    "\n",
    "# 5 日动量\n",
    "momentum5 =  Close - lag5Close\n",
    "momentum5.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Momentum5')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:214: RuntimeWarning: Glyph 8722 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py:183: RuntimeWarning: Glyph 8722 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.subplot(211)\n",
    "plt.plot(Close, 'b*')\n",
    "plt.xlabel('date')\n",
    "plt.ylabel('Close')\n",
    "plt.title('5日动量图')\n",
    "\n",
    "plt.subplot(212)\n",
    "plt.plot(momentum5, 'r-*')\n",
    "plt.xlabel('date')\n",
    "plt.ylabel('Momentum5')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def momentum(price, periond):\n",
    "    lagPrice = price.shift(periond)\n",
    "    momen = price - lagPrice\n",
    "    momen = momen.dropna()\n",
    "    return (momen)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "2021-09-08 00:00:00+00:00    292.64\n",
       "2021-09-09 00:00:00+00:00   -374.43\n",
       "2021-09-10 00:00:00+00:00    303.92\n",
       "2021-09-13 00:00:00+00:00   -349.82\n",
       "2021-09-14 00:00:00+00:00   -851.40\n",
       "Name: close, dtype: float64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "momentum(Close, 5).tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
